package com.luoguijia.disk.login.repository;

import com.luoguijia.disk.login.entity.UserEntity;
import com.luoguijia.disk.mybatis.entity.PtMenuEntity;
import com.luoguijia.disk.mybatis.entity.PtUserEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface LoginDao {
    /**
     * 根据用户名查询用户信息
     * @param username 登录用户名
     * @return 用户实体（包含加密后的密码）
     */
    PtUserEntity queryUserInfoByName(@Param("username") String username);

    /**
     * 通过邮箱查询用户信息（用于找回密码等场景）
     * @param email 用户邮箱
     * @return 用户信息实体
     */
    PtUserEntity queryUserInfoByEmail(@Param("email") String email);

    /**
     * 查询用户可见的菜单列表（支持国际化）
     * @param lang 语言标识（如"zh"、"en"）
     * @param userUuid 用户唯一标识
     * @return 菜单实体列表
     */
    List<PtMenuEntity> queryMenuList(@Param("lang") String lang, @Param("userUuid") String userUuid);

    /**
     * 查询用户拥有的权限编码列表
     * @param userUuid 用户唯一标识
     * @return 权限编码列表（如"sys:user:edit"）
     */
    List<String> queryPermissionList(@Param("userUuid") String userUuid);

    /**
     * 更新用户密码（需传入加密后的密码）
     * @param userUuid 用户唯一标识
     * @param newPassword 加密后的新密码
     */
    void updatePassword(@Param("userUuid") String userUuid, @Param("newPassword") String newPassword);

    /**
     * 重置用户密码为默认值（默认密码需加密存储）
     * @param userId 用户主键ID
     * @param defaultPassword 加密后的默认密码（新增参数）
     */
    void resetPassword(@Param("userId") Long userId, @Param("defaultPassword") String defaultPassword);

    /**
     * 保存注册用户信息（密码需提前加密）
     * @param user 包含用户名、加密密码等信息的实体
     * @return 受影响的行数（1表示成功）
     */
    int saveUser(UserEntity user);

    /**
     * 批量重置用户密码为默认值
     * @param userIds 要重置密码的用户ID列表
     * @param defaultPassword 加密后的默认密码（新增参数）
     */
    void batchResetPassword(@Param("userIds") List<Long> userIds, @Param("defaultPassword") String defaultPassword);
}
